home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1997 / HAM Radio 1997.iso / vcls / moden / admodem.int < prev    next >
Text File  |  1996-04-08  |  17KB  |  455 lines

  1. {$G+,X+,F+}
  2.  
  3. {Conditional defines that may affect this unit}
  4. {$I AWDEFINE.INC}
  5.  
  6. {*********************************************************}
  7. {*                   ADMODEM.PAS 1.01                    *}
  8. {*        Copyright (c) TurboPower Software 1995         *}
  9. {*                 All rights reserved.                  *}
  10. {*********************************************************}
  11.  
  12. unit AdModem;
  13.   {-Delphi modem component}
  14.  
  15. interface
  16.  
  17. uses
  18.   WinProcs,
  19.   {-----RTL}
  20.   SysUtils,
  21.   Classes,
  22.   Messages,
  23.   WinTypes,
  24.   DsgnIntf,
  25.   Forms,
  26.   Controls,
  27.   {-----APD}
  28.   OoMisc,
  29.   {$IFNDEF UseAPWDLL}
  30.   AwModem,
  31.   {$ENDIF}
  32.   AdMisc,
  33.   AdExcept,
  34.   AdPort,
  35.   AdModDB;
  36.  
  37. {$IFDEF UseAPWDLL}
  38. {$I AWMODEM.PA0}
  39. {$ENDIF}
  40.  
  41. const
  42.   {defaults}
  43.   DefAutoStart = True;
  44.  
  45. type
  46.   {!!.01 - added}
  47.   TModemStatus = (msModemOK, msModemConnect, msModemBusy, msModemVoice,
  48.                   msModemNoCarrier, msModemNoDialTone, msModemError,
  49.                   msGotLineSpeed, msGotErrCorrection, msGotDataCompression,
  50.                   msCmdTimeout, msDialTimeout, msAnswerTimeout, msDialCount,
  51.                   msAnswerCount, msModemRing, msModemIsConnected, msConnectFailed);
  52.  
  53.   TLineSpeedEvent = procedure(M : TObject; Speed : LongInt) of object;
  54.   TConnectCountEvent = procedure(M : TObject; Remaining : Word) of object;
  55.   {!!.01 - added}
  56.   TModemEvent = procedure(M : TObject; WhatHappened : TModemStatus; Data : LongInt) of object;
  57.  
  58.   {.Z+}
  59.   PPChar = ^PChar;
  60.  
  61.   TTagSet = class(TPersistent)
  62.   protected {private}
  63.     FStrings : array[1..MaxTags] of TTagString;
  64.  
  65.     function GetStr(Index : Integer) : TTagString;
  66.     procedure SetStr(Index : Integer; const Tag : TTagString);
  67.  
  68.   public
  69.     constructor Create;
  70.  
  71.     property Strings[Index : Integer] : TTagString
  72.       read GetStr write SetStr;
  73.  
  74.   published
  75.     property String1 : TTagString
  76.       read FStrings[1] write FStrings[1];
  77.     property String2 : TTagString
  78.       read FStrings[2] write FStrings[2];
  79.     property String3 : TTagString
  80.       read FStrings[3] write FStrings[3];
  81.     property String4 : TTagString
  82.       read FStrings[4] write FStrings[4];
  83.     property String5 : TTagString
  84.       read FStrings[5] write FStrings[5];
  85.   end;
  86.   {.Z-}
  87.  
  88.   TApdCustomModem = class(TComponent)
  89.   protected {private}
  90.     {.Z+}
  91.     ModemRec             : PModemRec;           {record passed to API calls}
  92.     FComPort             : TApdCustomComPort;   {port modem is attached to}
  93.     Data                 : TModemInfo;          {data about modem}
  94.  
  95.     FDialTimeout         : Word;
  96.     FAnswerTimeout       : Word;
  97.     FDelayFactor         : Word;
  98.     FCmdTimeout          : Word;
  99.     FDTRDropHold         : Word;
  100.     FCharDelay           : Word;
  101.     FTildeDelay          : Word;
  102.     FRingWaitTimeout     : Word;
  103.     FAutoStart           : Boolean;
  104.     FStarted             : Boolean;
  105.     FDataCompressionTags : TTagSet;
  106.     FErrorCorrectionTags : TTagSet;
  107.     FModemOk             : TNotifyEvent;
  108.     FModemConnect        : TNotifyEvent;
  109.     FModemBusy           : TNotifyEvent;
  110.     FModemVoice          : TNotifyEvent;
  111.     FModemNoCarrier      : TNotifyEvent;
  112.     FModemNoDialTone     : TNotifyEvent;
  113.     FModemError          : TNotifyEvent;
  114.     FGotLineSpeed        : TLineSpeedEvent;
  115.     FGotErrCorrection    : TNotifyEvent;
  116.     FGotDataCompression  : TNotifyEvent;
  117.     FCmdTimedOut         : TNotifyEvent;
  118.     FDialTimedOut        : TNotifyEvent;
  119.     FAnswerTimedOut      : TNotifyEvent;
  120.     FDialCount           : TConnectCountEvent;
  121.     FAnswerCount         : TConnectCountEvent;
  122.     FOnByeBye            : TNotifyEvent;
  123.     FModemIsConnected    : TNotifyEvent;        {!!.01}
  124.     FConnectFailed       : TNotifyEvent;        {!!.01}
  125.     FCommandProcessed    : TModemEvent;         {!!.01}
  126.     FModemRing           : TNotifyEvent;        {!!.01}
  127.     FModemEvent          : TModemEvent;         {!!.01}
  128.  
  129.     procedure SetComPort(const NewPort : TApdCustomComPort);
  130.       {-Change the modem's com port}
  131.     procedure SetModemStrPrim(const NewData : String; var Data : String; RecData : PPChar);
  132.       {-Set a modem's string field}
  133.     procedure SetInitCmd(Cmd : TCmdString);
  134.       {-Set the modem's InitCmd field}
  135.     procedure SetDialCmd(Cmd : TCmdString);
  136.       {-Set the modem's DialCmd field}
  137.     procedure SetDialTerm(Cmd : TCmdString);
  138.       {-Set the modem's DialTerm field}
  139.     procedure SetDialCancel(Cmd : TCmdString);
  140.       {-Set the modem's DialCancel field}
  141.     procedure SetHangupCmd(Cmd : TCmdString);
  142.       {-Set the modem's HangupCmd field}
  143.     procedure SetConfigCmd(Cmd : TConfigString);
  144.       {-Set the modem's ConfigCmd field}
  145.     procedure SetAnswerCmd(Cmd : TCmdString);
  146.       {-Set the modem's AnswerCmd field}
  147.     procedure SetOkMsg(Rsp : TRspString);
  148.       {-Set the modem's OkMsg field}
  149.     procedure SetConnectMsg(Rsp : TRspString);
  150.       {-Set the modem's ConnectMsg field}
  151.     procedure SetBusyMsg(Rsp : TRspString);
  152.       {-Set the modem's BusyMsg field}
  153.     procedure SetVoiceMsg(Rsp : TRspString);
  154.       {-Set the modem's VoiceMsg field}
  155.     procedure SetNoCarrierMsg(Rsp : TRspString);
  156.       {-Set the modem's NoCarrierMsg field}
  157.     procedure SetNoDialToneMsg(Rsp : TRspString);
  158.       {-Set the modem's NoDialToneMsg field}
  159.     procedure SetErrorMsg(Rsp : TRspString);
  160.       {-Set the modem's ErrorMsg field}
  161.     procedure SetRingMsg(Rsp : TRspString);
  162.       {-Set the modem's RingMsg field}
  163.     procedure SetDataCompressionTags(const Tags : TTagSet);
  164.       {-Set modem data compression tags}
  165.     procedure SetErrorCorrectionTags(const Tags : TTagSet);
  166.       {-Set modem error correction tags}
  167.     procedure SetLockDTE(Lock : Boolean);
  168.       {-Set whether the modem should lock the port rate or not}
  169.     procedure SetDialTimeout(Secs : Word);
  170.       {-Set the number of seconds before a dial attempt times out}
  171.     procedure SetAnswerTimeout(Secs : Word);
  172.       {-Set the number of seconds before an answer attempt times out}
  173.     procedure SetDelayFactor(Ticks : Word);
  174.       {-Set the number of ticks to wait between commands sent to the modem}
  175.     procedure SetCmdTimeout(Ticks : Word);
  176.       {-Set the number of ticks to wait for a modem response}
  177.     procedure SetDTRDropHold(Ticks : Word);
  178.       {-Set the number of ticks to hold DTR low during hangup}
  179.     procedure SetCharDelay(Ticks : Word);
  180.       {-Set the number of ticks to wait between each command character sent}
  181.     procedure SetTildeDelay(Ticks : Word);
  182.       {-Set the number of ticks to wait when a '~' is encountered in a command}
  183.     procedure SetRingWaitTimeout(Ticks : Word);
  184.       {-Set the number of ticks to wait before AutoAnswer resets}
  185.     procedure SetStarted(Start : Boolean);
  186.       {-Start or stop the modem}
  187.     procedure SetModemInfo(const Info : TModemInfo);
  188.       {-Set all fields for a modem}
  189.  
  190.     procedure Notification(AComponent : TComponent; Operation : TOperation); override;
  191.     procedure CreateModemRecord;
  192.       {-Create the record passed to the API functions}
  193.     procedure DestroyModemRecord;
  194.       {-Destroy the record passed to the API functions}
  195.     procedure AssureStarted;
  196.       {-Make sure the modem has been started}
  197.     procedure ModemPortClose(CP : TObject; Opening : Boolean);      {!!.01}
  198.       {-Called when the port the modem is attached to is closed}    {!!.01}
  199.  
  200.   protected
  201.     {event methods}
  202.     procedure ModemOk; virtual;
  203.     procedure ModemConnect; virtual;
  204.     procedure ModemBusy; virtual;
  205.     procedure ModemVoice; virtual;
  206.     procedure ModemNoCarrier; virtual;
  207.     procedure ModemNoDialTone; virtual;
  208.     procedure ModemError; virtual;
  209.     procedure GotLineSpeed(Speed : LongInt); virtual;
  210.     procedure GotErrCorrection; virtual;
  211.     procedure GotDataCompression; virtual;
  212.     procedure CmdTimedOut; virtual;
  213.     procedure DialTimedOut; virtual;
  214.     procedure AnswerTimedOut; virtual;
  215.     procedure DialCount(Remaining : Word); virtual;
  216.     procedure AnswerCount(Remaining : Word); virtual;
  217.     procedure ModemIsConnected; virtual;      {!!.01}
  218.     procedure ConnectFailed; virtual;         {!!.01}
  219.     procedure ModemRing; virtual;             {!!.01}
  220.  
  221.     {!!.01 - added}
  222.     procedure CommandProcessed(const WhatHappened : TModemStatus); virtual;
  223.     {!!.01 - added}
  224.     procedure ModemEvent(const WhatHappened : TModemStatus; const Data : LongInt);
  225.  
  226.   public
  227.     {creation/destruction}
  228.     constructor Create(AOwner : TComponent); override;
  229.     destructor Destroy; override;
  230.     {.Z-}
  231.  
  232.     property Started : Boolean
  233.       read FStarted write SetStarted;
  234.     property ModemInfo : TModemInfo
  235.       read Data write SetModemInfo;
  236.  
  237.     {com port this is linked to}
  238.     property ComPort : TApdCustomComPort
  239.       read FComPort write SetComPort;
  240.  
  241.     {set this property TRUE to set Start := True automatically}
  242.     property AutoStart : Boolean
  243.       read FAutoStart write FAutoStart default DefAutoStart;
  244.  
  245.     {commands, timeouts, etc.}
  246.     property InitCmd : TCmdString
  247.       read Data.InitCmd write SetInitCmd;
  248.     property DialCmd : TCmdString
  249.       read Data.DialCmd write SetDialCmd;
  250.     property DialTerm : TCmdString
  251.       read Data.DialTerm write SetDialTerm;
  252.     property DialCancel : TCmdString
  253.       read Data.DialCancel write SetDialCancel;
  254.     property HangupCmd : TCmdString
  255.       read Data.HangupCmd write SetHangupCmd;
  256.     property ConfigCmd : TConfigString
  257.       read Data.ConfigCmd write SetConfigCmd;
  258.     property AnswerCmd : TCmdString
  259.       read Data.AnswerCmd write SetAnswerCmd;
  260.     property OkMsg : TRspString
  261.       read Data.OkMsg write SetOkMsg;
  262.     property ConnectMsg : TRspString
  263.       read Data.ConnectMsg write SetConnectMsg;
  264.     property BusyMsg : TRspString
  265.       read Data.BusyMsg write SetBusyMsg;
  266.     property VoiceMsg : TRspString
  267.       read Data.VoiceMsg write SetVoiceMsg;
  268.     property NoCarrierMsg : TRspString
  269.       read Data.NoCarrierMsg write SetNoCarrierMsg;
  270.     property NoDialToneMsg : TRspString
  271.       read Data.NoDialToneMsg write SetNoDialToneMsg;
  272.     property ErrorMsg : TRspString
  273.       read Data.ErrorMsg write SetErrorMsg;
  274.     property RingMsg : TRspString
  275.       read Data.RingMsg write SetRingMsg;
  276.     property DataCompressionTags : TTagSet
  277.       read FDataCompressionTags write SetDataCompressionTags;
  278.     property ErrorCorrectionTags : TTagSet
  279.       read FErrorCorrectionTags write SetErrorCorrectionTags;
  280.     property LockDTE : Boolean
  281.       read Data.LockDTE write SetLockDTE;
  282.     property DialTimeout : Word
  283.       read FDialTimeout write SetDialTimeout default DefDialTimeout;
  284.     property AnswerTimeout : Word
  285.       read FAnswerTimeout write SetAnswerTimeout default DefAnswerTimeout;
  286.     property DelayFactor : Word
  287.       read FDelayFactor write SetDelayFactor default DefDelayFactor;
  288.     property CmdTimeout : Word
  289.       read FCmdTimeout write SetCmdTimeout default DefCmdTimeout;
  290.     property DTRDropHold : Word
  291.       read FDTRDropHold write SetDTRDropHold default DefDTRDropHold;
  292.     property CharDelay : Word
  293.       read FCharDelay write SetCharDelay default DefModemCharDelay;
  294.     property TildeDelay : Word
  295.       read FTildeDelay write SetTildeDelay default DefTildeDelay;
  296.     property RingWaitTimeout : Word
  297.       read FRingWaitTimeout write SetRingWaitTimeout default DefRingWaitTimeout;
  298.  
  299.     {events}
  300.     property OnModemOk : TNotifyEvent
  301.       read FModemOk write FModemOk;
  302.     property OnModemConnect : TNotifyEvent
  303.       read FModemConnect write FModemConnect;
  304.     property OnModemBusy : TNotifyEvent
  305.       read FModemBusy write FModemBusy;
  306.     property OnModemVoice : TNotifyEvent
  307.       read FModemVoice write FModemVoice;
  308.     property OnModemNoCarrier : TNotifyEvent
  309.       read FModemNoCarrier write FModemNoCarrier;
  310.     property OnModemNoDialTone : TNotifyEvent
  311.       read FModemNoDialTone write FModemNoDialTone;
  312.     property OnModemError : TNotifyEvent
  313.       read FModemError write FModemError;
  314.     property OnGotLineSpeed : TLineSpeedEvent
  315.       read FGotLineSpeed write FGotLineSpeed;
  316.     property OnGotErrCorrection : TNotifyEvent
  317.       read FGotErrCorrection write FGotErrCorrection;
  318.     property OnGotDataCompression : TNotifyEvent
  319.       read FGotDataCompression write FGotDataCompression;
  320.     property OnCmdTimedOut : TNotifyEvent
  321.       read FCmdTimedOut write FCmdTimedOut;
  322.     property OnDialTimedOut : TNotifyEvent
  323.       read FDialTimedOut write FDialTimedOut;
  324.     property OnAnswerTimedOut : TNotifyEvent
  325.       read FAnswerTimedOut write FAnswerTimedOut;
  326.     property OnDialCount : TConnectCountEvent
  327.       read FDialCount write FDialCount;
  328.     property OnAnswerCount : TConnectCountEvent
  329.       read FAnswerCount write FAnswerCount;
  330.     property OnByeBye : TNotifyEvent
  331.       read FOnByeBye write FOnByeBye;
  332.     property OnCommandProcessed : TModemEvent         {!!.01}
  333.       read FCommandProcessed write FCommandProcessed; {!!.01}
  334.     property OnModemIsConnected : TNotifyEvent        {!!.01}
  335.       read FModemIsConnected write FModemIsConnected; {!!.01}
  336.     property OnConnectFailed : TNotifyEvent           {!!.01}
  337.       read FConnectFailed write FConnectFailed;       {!!.01}
  338.     property OnModemRing : TNotifyEvent               {!!.01}
  339.       read FModemRing write FModemRing;               {!!.01}
  340.     property OnModemEvent : TModemEvent               {!!.01}
  341.       read FModemEvent write FModemEvent;             {!!.01}
  342.  
  343.     procedure PutCommand(const Cmd : String);
  344.       {-Put a command to the modem and handle the response}
  345.     procedure Initialize;
  346.       {-Send the initialization string to the modem}
  347.     procedure Configure;
  348.       {-Send the configuration strings to the modem}
  349.     procedure Dial(const Number : String);
  350.       {-Dial the modem}
  351.     function IsAttemptingConnect : Boolean;
  352.       {-Return TRUE if the modem is attempting to establish a connection}
  353.     procedure ExtendConnectAttempt(const DeltaSecs : Integer);
  354.       {-Extend the amount of time the modem waits for a CONNECT result}
  355.     procedure CancelDialAnswer;
  356.       {-Cancel the dial/answer in progress}
  357.     function GetConnectSpeed : LongInt;
  358.       {-Get the actual speed of the connection}
  359.     procedure Hangup;
  360.       {-Hangup the modem}
  361.     procedure Answer;
  362.       {-Answer the modem}
  363.     procedure AutoAnswer(const Rings : Word);
  364.       {-Answer the modem after Rings rings}
  365.     function FeatureWaitOver : Boolean;
  366.       {-Return TRUE if all modem features have been received and processed}
  367.     procedure WaitOnFeatures;
  368.       {-Wait until all modem features have been received}
  369.     procedure WaitOnResponse;
  370.       {-Wait until the modem finishes processing the last command}
  371.   end;
  372.  
  373.   TApdModem = class(TApdCustomModem)
  374.   published
  375.     {com port this is linked to}
  376.     property ComPort;
  377.  
  378.     {commands, timeouts, etc.}
  379.     property InitCmd;
  380.     property DialCmd;
  381.     property DialTerm;
  382.     property DialCancel;
  383.     property HangupCmd;
  384.     property ConfigCmd;
  385.     property AnswerCmd;
  386.     property OkMsg;
  387.     property ConnectMsg;
  388.     property BusyMsg;
  389.     property VoiceMsg;
  390.     property NoCarrierMsg;
  391.     property NoDialToneMsg;
  392.     property ErrorMsg;
  393.     property RingMsg;
  394.     property DataCompressionTags;
  395.     property ErrorCorrectionTags;
  396.     property LockDTE;
  397.     property DialTimeout;
  398.     property AnswerTimeout;
  399.     property DelayFactor;
  400.     property CmdTimeout;
  401.     property DTRDropHold;
  402.     property CharDelay;
  403.     property TildeDelay;
  404.     property RingWaitTimeout;
  405.  
  406.     {events}
  407.     property OnModemOk;
  408.     property OnModemConnect;
  409.     property OnModemBusy;
  410.     property OnModemVoice;
  411.     property OnModemNoCarrier;
  412.     property OnModemNoDialTone;
  413.     property OnModemError;
  414.     property OnGotLineSpeed;
  415.     property OnGotErrCorrection;
  416.     property OnGotDataCompression;
  417.     property OnCmdTimedOut;
  418.     property OnDialTimedOut;
  419.     property OnAnswerTimedOut;
  420.     property OnDialCount;
  421.     property OnAnswerCount;
  422.     property OnCommandProcessed; {!!.01}
  423.     property OnModemIsConnected; {!!.01}
  424.     property OnConnectFailed;    {!!.01}
  425.     property OnModemRing;        {!!.01}
  426.     property OnModemEvent;       {!!.01}
  427.   end;
  428.  
  429. const
  430.   DefModemData : TModemInfo =
  431.     ( Name          : '';
  432.       InitCmd       : 'ATZ^M';
  433.       DialCmd       : 'ATDT';
  434.       DialTerm      : '^M';
  435.       DialCancel    : '^M';
  436.       HangupCmd     : '+++~~~ATH0^M';
  437.       ConfigCmd     : 'ATE1Q0X1V1^M';
  438.       AnswerCmd     : 'ATA^M';
  439.       OkMsg         : 'OK';
  440.       ConnectMsg    : 'CONNECT';
  441.       BusyMsg       : 'BUSY';
  442.       VoiceMsg      : 'VOICE';
  443.       NoCarrierMsg  : 'NO CARRIER';
  444.       NoDialToneMsg : 'NO DIALTONE';
  445.       ErrorMsg      : 'ERROR';
  446.       RingMsg       : 'RING';
  447.       NumErrors     : 0;
  448.       Errors        : ('', '', '', '', '');
  449.       NumComps      : 0;
  450.       Compression   : ('', '', '', '', '');
  451.       LockDTE       : True;
  452.       DefBaud       : 19200
  453.     );
  454.  
  455.